package com.company.netty.demo.NIO.demo;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 * NIO: JDK新特性，非阻塞式；BIO：阻塞式
 * 包含三大核心组件：
 *  Channel（通道）
 *  Buffer（缓冲区）
 *  Selector(选择器)
 *
 * NIO是面向缓冲区、或者面向块变成的；数据督导一个它稍后处理的缓冲区，需要时可在缓冲区中前后移动为止，增加了处理过程中的灵活性，
 * 使用它可以提供非阻塞式的高伸缩性网络；
 *  todo： 课程8
 * */

public class NioServer {

    public static void main(String[] args) {

        EventLoopGroup bossGroup = new NioEventLoopGroup();

        EventLoopGroup workerGroup = new NioEventLoopGroup();


        try{
            ServerBootstrap serverBootstrap = new ServerBootstrap();

            serverBootstrap
                    .group(bossGroup,workerGroup)
                    .channel(NioServerSocketChannel.class)
                    .childHandler(new HelloServerInitializer());

            ChannelFuture sync = serverBootstrap.bind(8078).sync();

            sync.channel().closeFuture().sync();


        }catch (Exception e){
            e.printStackTrace();
        }finally {
            bossGroup.shutdownGracefully();
            workerGroup.shutdownGracefully();

        }

    }

}
